{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "executionInfo": {
     "elapsed": 8251,
     "status": "ok",
     "timestamp": 1650011468229,
     "user": {
      "displayName": "Sam Lu",
      "userId": "15789059763790170725"
     },
     "user_tz": -480
    },
    "id": "BQXVYW2T_DcQ"
   },
   "outputs": [],
   "source": [
    "import gym\n",
    "import torch\n",
    "import torch.nn.functional as F\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from tqdm import tqdm\n",
    "import rl_utils"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "executionInfo": {
     "elapsed": 7,
     "status": "ok",
     "timestamp": 1650011468231,
     "user": {
      "displayName": "Sam Lu",
      "userId": "15789059763790170725"
     },
     "user_tz": -480
    },
    "id": "ClM8RKjB_DcR"
   },
   "outputs": [],
   "source": [
    "class PolicyNet(torch.nn.Module):\n",
    "    def __init__(self, state_dim, hidden_dim, action_dim):\n",
    "        super(PolicyNet, self).__init__()\n",
    "        self.fc1 = torch.nn.Linear(state_dim, hidden_dim)\n",
    "        self.fc2 = torch.nn.Linear(hidden_dim, action_dim)\n",
    "\n",
    "    def forward(self, x):\n",
    "        x = F.relu(self.fc1(x))\n",
    "        return F.softmax(self.fc2(x), dim=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "executionInfo": {
     "elapsed": 6,
     "status": "ok",
     "timestamp": 1650011468231,
     "user": {
      "displayName": "Sam Lu",
      "userId": "15789059763790170725"
     },
     "user_tz": -480
    },
    "id": "w0W82SjM_DcS"
   },
   "outputs": [],
   "source": [
    "class REINFORCE:\n",
    "    def __init__(self, state_dim, hidden_dim, action_dim, learning_rate, gamma,\n",
    "                 device):\n",
    "        self.policy_net = PolicyNet(state_dim, hidden_dim,\n",
    "                                    action_dim).to(device)\n",
    "        self.optimizer = torch.optim.Adam(self.policy_net.parameters(),\n",
    "                                          lr=learning_rate)  # 使用Adam优化器\n",
    "        self.gamma = gamma  # 折扣因子\n",
    "        self.device = device\n",
    "\n",
    "    def take_action(self, state):  # 根据动作概率分布随机采样\n",
    "        state = torch.tensor([state], dtype=torch.float).to(self.device)\n",
    "        probs = self.policy_net(state)\n",
    "        action_dist = torch.distributions.Categorical(probs)\n",
    "        action = action_dist.sample()\n",
    "        return action.item()\n",
    "\n",
    "    def update(self, transition_dict):\n",
    "        reward_list = transition_dict['rewards']\n",
    "        state_list = transition_dict['states']\n",
    "        action_list = transition_dict['actions']\n",
    "\n",
    "        G = 0\n",
    "        self.optimizer.zero_grad()\n",
    "        for i in reversed(range(len(reward_list))):  # 从最后一步算起\n",
    "            reward = reward_list[i]\n",
    "            state = torch.tensor([state_list[i]],\n",
    "                                 dtype=torch.float).to(self.device)\n",
    "            action = torch.tensor([action_list[i]]).view(-1, 1).to(self.device)\n",
    "            log_prob = torch.log(self.policy_net(state).gather(1, action))\n",
    "            G = self.gamma * G + reward\n",
    "            loss = -log_prob * G  # 每一步的损失函数\n",
    "            loss.backward()  # 反向传播计算梯度\n",
    "        self.optimizer.step()  # 梯度下降"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "executionInfo": {
     "elapsed": 102519,
     "status": "ok",
     "timestamp": 1650011570745,
     "user": {
      "displayName": "Sam Lu",
      "userId": "15789059763790170725"
     },
     "user_tz": -480
    },
    "id": "WeykNnJM_DcT",
    "outputId": "bed6d0bb-f499-4611-b74d-dee1959d8c06"
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_34560\\4125764203.py:12: UserWarning: Creating a tensor from a list of numpy.ndarrays is extremely slow. Please consider converting the list to a single numpy.ndarray with numpy.array() before converting to a tensor. (Triggered internally at C:\\actions-runner\\_work\\pytorch\\pytorch\\pytorch\\torch\\csrc\\utils\\tensor_new.cpp:257.)\n",
      "  state = torch.tensor([state], dtype=torch.float).to(self.device)\n",
      "Iteration 0:   0%|                                                                             | 0/100 [00:00<?, ?it/s]\n"
     ]
    },
    {
     "ename": "ValueError",
     "evalue": "expected sequence of length 4 at dim 2 (got 0)",
     "output_type": "error",
     "traceback": [
      "\u001b[31m---------------------------------------------------------------------------\u001b[39m",
      "\u001b[31mValueError\u001b[39m                                Traceback (most recent call last)",
      "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[6]\u001b[39m\u001b[32m, line 31\u001b[39m\n\u001b[32m     29\u001b[39m done = \u001b[38;5;28;01mFalse\u001b[39;00m\n\u001b[32m     30\u001b[39m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m done:\n\u001b[32m---> \u001b[39m\u001b[32m31\u001b[39m     action = agent.take_action(state)\n\u001b[32m     32\u001b[39m     next_state, reward, done, _ = env.step(action)\n\u001b[32m     33\u001b[39m     transition_dict[\u001b[33m'\u001b[39m\u001b[33mstates\u001b[39m\u001b[33m'\u001b[39m].append(state)\n",
      "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[4]\u001b[39m\u001b[32m, line 12\u001b[39m, in \u001b[36mREINFORCE.take_action\u001b[39m\u001b[34m(self, state)\u001b[39m\n\u001b[32m     11\u001b[39m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34mtake_action\u001b[39m(\u001b[38;5;28mself\u001b[39m, state):  \u001b[38;5;66;03m# 根据动作概率分布随机采样\u001b[39;00m\n\u001b[32m---> \u001b[39m\u001b[32m12\u001b[39m     state = torch.tensor([state], dtype=torch.float).to(\u001b[38;5;28mself\u001b[39m.device)\n\u001b[32m     13\u001b[39m     probs = \u001b[38;5;28mself\u001b[39m.policy_net(state)\n\u001b[32m     14\u001b[39m     action_dist = torch.distributions.Categorical(probs)\n",
      "\u001b[31mValueError\u001b[39m: expected sequence of length 4 at dim 2 (got 0)"
     ]
    }
   ],
   "source": [
    "learning_rate = 1e-3\n",
    "num_episodes = 1000\n",
    "hidden_dim = 128\n",
    "gamma = 0.98\n",
    "device = torch.device(\"cuda\") if torch.cuda.is_available() else torch.device(\n",
    "    \"cpu\")\n",
    "\n",
    "env_name = \"CartPole-v0\"\n",
    "env = gym.make(env_name)\n",
    "env.seed(0)\n",
    "torch.manual_seed(0)\n",
    "state_dim = env.observation_space.shape[0]\n",
    "action_dim = env.action_space.n\n",
    "agent = REINFORCE(state_dim, hidden_dim, action_dim, learning_rate, gamma,\n",
    "                  device)\n",
    "\n",
    "return_list = []\n",
    "for i in range(10):\n",
    "    with tqdm(total=int(num_episodes / 10), desc='Iteration %d' % i) as pbar:\n",
    "        for i_episode in range(int(num_episodes / 10)):\n",
    "            episode_return = 0\n",
    "            transition_dict = {\n",
    "                'states': [],\n",
    "                'actions': [],\n",
    "                'next_states': [],\n",
    "                'rewards': [],\n",
    "                'dones': []\n",
    "            }\n",
    "            state = env.reset()\n",
    "            done = False\n",
    "            while not done:\n",
    "                action = agent.take_action(state)\n",
    "                next_state, reward, done, _ = env.step(action)\n",
    "                transition_dict['states'].append(state)\n",
    "                transition_dict['actions'].append(action)\n",
    "                transition_dict['next_states'].append(next_state)\n",
    "                transition_dict['rewards'].append(reward)\n",
    "                transition_dict['dones'].append(done)\n",
    "                state = next_state\n",
    "                episode_return += reward\n",
    "            return_list.append(episode_return)\n",
    "            agent.update(transition_dict)\n",
    "            if (i_episode + 1) % 10 == 0:\n",
    "                pbar.set_postfix({\n",
    "                    'episode':\n",
    "                    '%d' % (num_episodes / 10 * i + i_episode + 1),\n",
    "                    'return':\n",
    "                    '%.3f' % np.mean(return_list[-10:])\n",
    "                })\n",
    "            pbar.update(1)\n",
    "\n",
    "# Iteration 0: 100%|██████████| 100/100 [00:04<00:00, 23.88it/s, episode=100,\n",
    "# return=55.500]\n",
    "# Iteration 1: 100%|██████████| 100/100 [00:08<00:00, 10.45it/s, episode=200,\n",
    "# return=75.300]\n",
    "# Iteration 2: 100%|██████████| 100/100 [00:16<00:00,  4.75it/s, episode=300,\n",
    "# return=178.800]\n",
    "# Iteration 3: 100%|██████████| 100/100 [00:20<00:00,  4.90it/s, episode=400,\n",
    "# return=164.600]\n",
    "# Iteration 4: 100%|██████████| 100/100 [00:21<00:00,  4.58it/s, episode=500,\n",
    "# return=156.500]\n",
    "# Iteration 5: 100%|██████████| 100/100 [00:21<00:00,  4.73it/s, episode=600,\n",
    "# return=187.400]\n",
    "# Iteration 6: 100%|██████████| 100/100 [00:22<00:00,  4.40it/s, episode=700,\n",
    "# return=194.500]\n",
    "# Iteration 7: 100%|██████████| 100/100 [00:23<00:00,  4.24it/s, episode=800,\n",
    "# return=200.000]\n",
    "# Iteration 8: 100%|██████████| 100/100 [00:23<00:00,  4.33it/s, episode=900,\n",
    "# return=200.000]\n",
    "# Iteration 9: 100%|██████████| 100/100 [00:22<00:00,  4.14it/s, episode=1000,\n",
    "# return=186.100]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 573
    },
    "executionInfo": {
     "elapsed": 1119,
     "status": "ok",
     "timestamp": 1650011571858,
     "user": {
      "displayName": "Sam Lu",
      "userId": "15789059763790170725"
     },
     "user_tz": -480
    },
    "id": "09ibOQwF_DcU",
    "outputId": "8762c94b-cc26-458a-cb3d-d1bb6b105089"
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEWCAYAAACJ0YulAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOy9d3hc1bW4/a5pqpblIncb2cbYmGaDTTfVBEggEG5oIcEQcgnfJQFuctP5hRRISEIKaRASakIcakIntIDpxoCxTTHFGNvCvUhWnba/P06ZPaMZaSRrNCrrfR49mtmn7TNnZq+9yl5LjDEoiqIoCkCg2B1QFEVR+g4qFBRFURQfFQqKoiiKjwoFRVEUxUeFgqIoiuKjQkFRFEXxUaGgKEqniMhqEZlf7H4ohUeFgtIh7mDQIiKNIrJBRG4RkUpr+y0iEnW3e39vuNtqRcSISMja14jIgdbxu4uIsd4/LSKtGec7xN0mIvINEXnP7dMaEfmpiJTk6M82EXlcRGZY20VELhGRFSLSJCLrROQuEdmns/spNCKyh9uXLSJSLyLLRORrIhLs5vluEZErM9rs57kx83n2Nu535D8i0iwi76jgKT4qFJR8ONkYUwnMAmYD38nY/nNjTKX1t18H59oGXNnBdoCvZJzvRbf9t8CFwLnAEOBE4Fjgzmz9AcYDdcCN1rZrgUuBS4DhwB7Av4BPdfN+egQRmQq8DKwF9jHGDAVOB+bg3GtXz9eRIPGe5/7u+S/veo97jIXA68AI4HvA3SJSU8T+DHpUKCh5Y4zZAPwbRzh0l1uBfUXkyK4cJCLTgP8BzjHGvGiMiRtj3gT+CzhBRI7J0t8WHIExyzrHxcDZxpinjDFtxphmY8ztxpiru3MzIvLfIvK+q5XcLyLjrG1GRC5yNZsdIvIHEZEcp/oh8IIx5mvGmPVu/1caYz5njNnhnu8uV1urF5FFIrKXda1bROQ6EXlYRJqAC4BzgG+6WsEDWT6fOuARYG/3HJ8WkTfdvj4tInvmuOeAiHxbRD4Qka0icqeIDM+x7yMi8pWMtjdE5DQR2QNHMF1hjGkxxtwDLMd5pkqRUKGg5I2ITMCZnb+/C6dpBn4CXNXF444F1hljFtuNxpi1wEvAcZkHiEgFcDap/mY9R3dxBdFPgTOAscBHwD8ydjsJmAvs6+53fI7TzQfu7uSSjwDTgFHAa8DtGds/h/O5DgFuc7d7Ws/JWfo/Efgk8Lo7QC8ELgNqgIeBB0QkkqUfXwVOBY4ExgHbgT/k6PNCnGfgXXMmsBvwELAXsMoYs9Pa/w23XSkSKhSUfPiXiOzEMW1sAq7I2P5/7uzS+7u1k/P9CZgkIifm2P5b61yvuW0jgfU59l/vbk/rD7ATOBz4gts+ooNz2OR7P+cANxljXjPGtOGY1Q4RkVprn6uNMTuMMWuA/5Bby+q0b8aYm4wxO91r/QDYT0SGWrvcZ4x53hiTNMa0dnCqf7mfz3PAMzhC+kzgIWPM48aYGHANUAYcmuX4i4DvGWPWWX35rLi+owz+CcwSkd3c9+cA97rHVQL1GfvX0w1zmdJzqFBQ8uFUY8wQ4ChgBukDMMA1xphq629BRydzB4Qfu3/ZuMQ61/5u2xac2Xg2xrrb0/oD1AItwHS3fWsH57DJ937G4WgHABhjGt1rjLf22WC9bsYZCLPRYd9EJCgiV7smmwZgtbvJfhZrcx2fwanufe1mjPkf18yWeS9J93zjsxy/G/BPT2gCbwMJYLSIXG856L/ragEPAWe5x55NSsNpBKoyzl2FI8yVIqFCQckbY8wzwC04s8hd5WagGjgtz/2fAiaKFbkEvgnkYODJzAPc2fmlwLUiUubuM0FE5uxKxy0+xhkgvb5U4Mz467pxrifo2Jb+OeAUHDPTUByBB2D7KDJTHnclBXLmvQgwkez3shY4MUNwlhpj6owxF1kO+p+4+y8EzhYniqwUR2MCeBOYIiK2ZrCf264UCRUKSlf5DXCciOxSRI4xJo5jhvpWnvu/C1wP3C4iB7sz572Ae4AnjDFP5DjucZwB70JjzHvAH4GFInKUiEREpFREzhKRb3fjNhYC54vILHHCYn8CvGyMWd2Nc10BHCoivxCRMeCH6/5NRKpxTCptOBpFuXutztgITMnz+ncCnxKRY0UkDHzdvd4LWfa9HrjKMwmJSI2InNLBuR/GETg/Au5wtRDvmS4FrnCfw2dwfC/35NlnpQCoUFC6hDFmM44T8/tWsxfh4v1tyXF4JgvJz8bv8RXgL8DfcEwPjwJP03m0yi/cPpbghKL+HscxugP4APgMYEfn5HU/riD6fziD2HpgKikzSZcwxnwAHIKjAbwpIvXueZfgmFNuwzHv1AFv4TjXO+NGYKZr5vlXJ9dfCXwe+B2OKe5knNDVaJbdrwXuBx5zfU0vAQd1cO424F4cLefvGZvPwgmL3Q5cDXzW/Y4pRUK0yI6iKIrioZqCoiiK4qNCQVEURfFRoaAoiqL4qFBQFEVRfLKtQOw3jBw50tTW1ha7G4qiKP2KV199dYsxJmviwX4tFGpra1myZEmxu6EoitKvEJGPcm1T85GiKIrio0JBURRF8VGhoCiKovioUFAURVF8VCgoiqIoPgUTCiIyUZyC3G+5Jf4udduHi1NM/T33/zC3XUTkt+KUNlwmIvt3fAVFURSlpymkphAHvm6MmYmT7/5itxTft4EnjTHTcPLbeymLT8QpNTgNpzj7dQXsm6IoipKFgq1TcIuPewXId4rI2zhVnE7BqeAFThH3p3Fy6p8C3GactK0viUi1iIz1ipgrg4NoPMmtL6zm2D1HMaUmV5Gygc9dS9YSTSQ556DdOt85C62xBDc/v5qWaJwj9qhhTu3wrPstenczS1ZvY/TQUnYbXkFDa4yAwAl751Ogrj13v7qONVub/PfDKyIsOLSWpmiCW19YTVssQWkkyIJDaqkoSQ0/25qi3P7SRwQCwoJDa6mIBLn1hdVsa4pSWRrii4dNJhR05rDGGG578SO2NrYBcNCUERy2+0jeXt/AI8vbDxfhYIBzD62lqjSUdpzNrEnVHDNjtP/+jlfWULe9xX9/8NQRHDrVKXK3ZPU2Fr3bcXbv0kiQ8w+dTFkkmNb+3HtbWF5Xz3mH1rbb1lfolcVrbs3a2cDLwGhroN8AeE9iPOnlBNe5bWlPWUQuxNEkmDRpUsH6rBSHZet2cNXDb7Povc389YKcKfoHDF7qeqfQmUNrLME37l4GwLzda5g0orzL531l9TZ+9ug7ACxevY1/XHhI1v1+8MCbrNrc1K599dWf6vI1G1pj/N9dbwAgAl5W/oOnjuDNugZ+8e+V/r7TRg3huJmpQfiRFev55ePvAjBpeDl7jq3iBw+85W9fUdfAbiPK+dK8KWxvinLF/anibHu+vYlHLp3HH5/+gAfe+Bixa9Hh9GPJR9sZXVXCnUvW+f2zt08YVuYLhfqWGN+6Z3nafTz5ziYeumQeAL/490pe/nBbu+vY5wPYY9QQ5lv3CPDfty2hJZZgxtghHD19VM7PMpMH3viYG5/7kNmTqrni5L2497V1DKuIdOkc+VJwoSAilTjFQi4zxjTYX35jjBGRLhV0MMbcANwAMGfOHC0GMcBojiYA2Lyz/WyuL9ASTbBuezPTRvdMbfkFN7/CR1ubeOYbR/ttrbGE//prdy7l7v/v0C6fNxpPAjCsPEyb+zob25uinHPQJM6cO5G2eJKfPvw2r63Z0eXrAWyobwXgd2fP5uT9xrGirp6Tfvccf170IZt2thIKCA989XBOvPZZ2uKJtGOb2uL+6y2NbWza6Zzrti8eyE8feYfH3tpAayzJtNFDmDisDICbz5vLfUvr/P42tcXZe3wVD351Xtq5v3TrEl74wKmTVDuinAcvmUelpaV8597lPP7WRv99m/v5X3nq3nz+4N342p1LeXnVNn97czTBMTNGcdN5c7N+DnU7Wjjs6qfY0tjGtqYon7z2Wc4/rJYvHzmVFvfcbbHczyQb1zy2ko+2NvPexp1ccfJe/P6p95k5rqr/CQW3rN89wO3GmHvd5o2eWUhExgKb3PY6nJqwHhPoXq1bpR/jDYihYI5pWJH5+l1LeXj5BhZ94+huzeAz8cwQyaQhEHDuOWoN4ks+2k59c4yh5eEunTeedOZLZeFg2vlskklDfUuMYeUR9p1QDcAhU0fwxrr6Ll2rNZbg0n+8zpptjrll7NBSAKbWVDKysoR7XnNm5wdNHk65azKJJdL75E0GRGBjQxvV7v2OGVrKI5fOY9POVg686knqm6NUlTrDVlVZmLJI0D+2ORqnLNzeJPOXBR2X5C4JBYhaQsoTohHXXFVdFqG+JeZvb4klsl7HY0RFBICtTVE+2NzIhoZWrnvmA7585FR/n8z7z8XO1hi3vrCatduaAYi6xyWMIRgozG+kYELBLfx9I/C2MeZX1qb7gQU4pfcWAPdZ7V8RkX/glParV3/C4KPV/UEGA30zWvrZd50Z546WKJPYdaHgEUsmKQk4A433wz9mxiieemcTa7c3M7R8KOCYm7Y3xxjuDjy5SLhCoTQSzDkANUbjJA3+AAwQCgRIJE2akLIxxrCjOUZZJEhpOIgxhov+9ipPr9zMjDFD+MTM0cwcVwVAWSTIy9891r9+JBhgQ4OjAcTi6Up+SzRBSShAdXmY65/5wG8fWVkCwNAyp4/1LTGq3AF6aFmYsnDIn0i0xJL+fl0hEgqkaVPe5x8JuUKhPExjW5xoPEkkFKAlmqC0A6FQGg5SWRLid0+9R6urEYSD6d/neDJ1va2Nbfxp0Sr+7xPT/WsCHH3N03y4pcnvy6yJ1Sz+cBuxRJJ4oh8KBeAw4AvAchFZ6rZ9F0cY3CkiF+DUnD3D3fYw8EngfaAZOL+AfVP6KL6mUKAvfE+R70yvI+wZfCxh8CwaXnvtiArAMcvsPd4RCne9uo5v3r2Mhy+Zx8xxVRhj+OPTH1C3o4XycJDLjtuDypKQ37+ycGomncnDy5w5V5U1kHqDki2kbK5+5B3+tGgVVaUhXvrusWxvjvH0Skfbueoz+3DAbsPS9g8GhKB1Hm9wjGZ8fi2xBGWRIL88fRbL6hxz0PjqMl/4lYScc1zz2LupGXx5mPJIkOZoHGMMLdE4Y6tKs95rR5SEAkQTSYwxiIj/+XufhdeHb92zjF+fOYvWWIKySMeTlu+fNJNldTv420trgPYamy0Uf/fU+9zywmqmjark9DkpY4knEACWXfEJ/vriRyz+cButsQRJYwjmcmrsIoWMPnoOyNXrY7Psb4CLC9UfpW+yaWcr1WUR/wfozdj6qlDwfsrR+K67s/787Cr/dSyehBL33O6AWVUWSnsP8Pz7jqbyzoYGZo6roqElzi/+vZJIKEA0nuSIPWo4Yo8aX1MoCwfZ0Zwyfdh4JhHbLu197nFLSNm8tb4BgIbWOOtdH4JHZ9oLpEwy2cxH5eEgh08byeHTRnZ4jnMP2Y3xw8oYWVlCWSRI0jjfm+ZowjdPdYVIMIAxjsktHLSEgtvXU2aN4/J/rWCjq+W0xBKUhjq+zhlzJ3LG3IksX1fPG+vqKQ0HWLu92d9uP9OKEudcnokok5GVJZSGg5S699YSS5BIFk5T6Js6ujJgSSQN25uiAHy8o4UDr3qSb9z9hr/dc/Jlqtu7wtbGNj/Kp6foCU3hgTc+zno+b1DynKG2UzbkmtU8n4E3uHxm1nh332Ta9rJIsN2sPPOatsnFC/uMJ9p/Xj9/9B2efW+Lb0/f2hhNcxAPL+9cKIRDknZtxxwVpb4l5g96ubj5vLn84XP7c/lJMzn/sMkAvhB4ePl66lti3Qrz9CYk3uceyzAfDSkNM2/aSFpiCUcjcbWafLjjy4dw1PQatjfHOPaXz/jtceuZlEe855z9Of38s/sA+J97azSpQkEZOPz4wbeY/ePHaY7Gee49Z9b76kfb/e2e+ainvvDrtjdzwJVPcPjP/pOmjsOuDey2Tbgjlqzexjl/eandtRZ/uI13Nuz0B/5oFqEwxHWo2maHcDA1k7f7Ue7ONj0B4mkK5R34FGLuOcKWUz/ivs4mSP74tGPrn+BG/2xtbKOx1REK8/ccnZczPOxrCs61//zsKmb96HEef2sjQ0o7Pv7oGaP41L7p6ydGu+air935Bjtb44wa0nXzUaaWmmk+AsdP0BpL8tz7WzCGDn0KNqXhIOOqy/xoupPc/scsodscdT7DPy1axUV/fdVvDwWE/zlqqh8q6wnA5li8oI5mFQpKr+LNjpujCRpaHfPFMGuG2drFUL3O8EwcdTta+P59K/z2+9/4mGnfe4RVmxu7dd58zUdfv+sNnn9/K+ushVAAf3FNR/P3dEw39iDhDUre4i5bKHhRWZ4w8IRDRSR937jlU4jlmIHGk0mCAUlbI+FrClmEXok7SH79E3sAsL05xk5XU7hs/rTsH0AGoYwIq5ueW8346jJ++Om9uOrUvfM6h82Je4/hia8dwcOXzOPRy+Zx8dFTOz8oA89f4fWpLdFeKJSFg7TGEtz6glObZtbE6rzPf2DtcEYNKWHaqEq+f9JM51qW0PUEK8Cjb25wHclJ4kmTJnyqXKH5z9fqSCQNgf7mU1CUjkgkDS2uA9Se8Hhx3MkumHvW17dw8/OrOX6v0RywW/rKXfuHY699eNAVTu9u3NmlldOeGSpfLSOcw4a+ubGNw3cfyXEzx/CvpR+nm48SmeYjSyi45iPvs/PMRJ4AeXrlZk7bf0Ka+SiWxRQEjkAJZ4T+2j6FTMojQc6cO5FDd3ds/s3ROKVtnoklv6FERIgEA8QSSdZsbWZDQyuH7T6CBYfW5nV8tvPtPmrX1oxkmo8yfQrgCIWWaIKGlhgHTxnOYbt37PewOXX2eE6d7Zj3PA3Oft47LRMcOBMmTwsoDaf6cNAU57sdd6PDCuV3U01BKQrReNIXAPbw482asg1KuXh4+QZuWLSK3zzxXrttbdZCMHvg8n6cmbOt1liCLVnSIGTi/ajveGUN723cmXM/b2DJXCuweWcbo4aU+IOyvd1zAPvmI2sA8QaLhYvX0BJN+BqB56y8/42PWbW50XI0h/zImkyiiSThjNBff4DMIvSi8SThYMDXStZtb6HRHdAqs3mlcxAOCrFEku3Njm/p/EMn531sIfDu+Vv3LOPNj+t523Wml9iaQiRISyzBjpYo1WWd+05y4URjSdr3O9PB3ByN+9/bklB65NbIyggtsQRx9SkoA41NO9t8G7U9IHqDTL42e0gN0NkWaTVFbaGQsll7M+kL//qqf836lhgH/eRJ5lz5BG993NDpNWOJJN+6Zzmf/v3zOffLNchua4oyrCJCONRek7j0H04Et2dWs++rwRUYq7c28/Dy9f59eM5KcGaaKU0h3YZvE0+YdosEfUd2lv1jCUM4GPAHo1teWM0id91GZZ6aAkA4FCCWMOx0JwBV3Vhb0JPMnljN3NphvLhqK2f96SV/cmE74EvCzvqEbU3Rbq2FsPGEIjhhp6+s3p62vTma8Nfr2JqC8z7oh6RmW0fSE6hQUIqCvUDJHhBTQiF/TcGbLWezOHlOPEgPc01Y599Q30JrLMF+P3zMn6V74Ye5iCUMm1xzVEss+zoASAmFJ97ayLuWRhGNJykNB6wQzfTO7zWuiskjKwgFUiGSH25p4q5X16XuLZbwB+/KktSMMp40lqPZGazPuuHFdn2LJ5O+D8HDExKZ5i5jDNFE0ndEe6yoqycclLQZbWcERXji7Y00tsXcvhfXij1xeDl/PtdZ9byzLc6IigiPXDqPUdaah+qyCNFEki2NUWqGlOzS9cKBgD9J+MhNHvjf8yZzyTG7A9DcluBZd6V75ufqCYWEmo+UgcZLq7b6r6NZhEKiC0LBG1ATWaTC4g+dnDUjKyNpgib9/OI7vT0yc/N4eEfFEkk/109HeIP+H5/+gP+67gXASS8RTxoiwaDvc/BX+rqfxYl7j3Hs7+76A3BCeAHOP6wWwHVGOtvswSPuajEAn95vHEDWfEbRuEmzm9v9zRQK3mdnO1+9fnd1UC8NB1m3vYXtzelmsmJi31dlaYg9x1albf/CIbtx/ef357pz9ue/j5iyS9cKBISbn1/N9qaoH233mdkTOHjKCMCZyHjfh8w1G95ixKRpb/rsKVQoKAXhqwtf58+LVuXcvtOKuPBWd77w/hY/PLUrPgVvYLQHspZogp89+g7L65w8PjVDStO2JzIERGaCso6SyHnXqm+Jdto325Hr3bMnBMMh8cMML1n4Oqs2N/pahxd1EgwIDy5bTzJp/P4f5S42S7jCBdJzRXmaQkCcWfClxzqRQZl+BUdTSB9YPCF11UNvt7tfe7tNV0xHAN84fnraNfqEULDuK1NQgqPNnLD3WE7cZ+wum48Odh3Gq7Y0+tF2peGA/zne+1qdn/bDS/PhURoO0NzWs2HbmahQUArCA298zFUPv935jqQGHE8gDCkJ5fQptMYS1Ges0PUEiD2w3/7yR1z39AcsW1fPvGkjqSwJpgka+/xt8YSvGZx7yG7+dTrus6Elmn6ObFRafgwnDbNJ5dYJBthrXJU/aL+zYSet0XShAM5s/K31DX7/vUVMsURKUIQsh7EnLLw2P3VFhqCNJ9qbIGZNckItM0NoPW3FEwqv/b/jGFnp+DxGd3FtwDF7juK8Q2v51D5j+fpxe+zyINsThIIBPwouUxvqaS443NE0WmOpYIuySJC9xjmpTGLJJE3ReNbV2aXhoK9Nq1BQ+g25BkhIDzV98KuHc+acif4g2RiNUxIKcMT0Gn8GvHxdPd+5d5kfEXL69S+y348e4421O3xfQubqXkj/wZSGg4QCgTRBYA+PbfGkP2PzzAa5NAVPw2hoiaX5K66xagXY1LgzvW8cPx1j4MbnPvTXDURCAUSEL81zom8+2tqcGiTcgf/as2YBuBEn6c7HeCLJda6zPhQU7nFTbHuagvcZeAN/pkkomki2m/lXloQ479BamqLxdvsCvmN8eEWERy87gvsuPqzTLKSZVJWG+cGn9+Jnn92Xrx47LW2dRDHxhEGhhYL3bFuiCX/yURYOEgwIU2oquPe1Ov720pqsC+TKI0E/1YgKBaXfsKkhe0hnNJ707cjgrIytrgj7g1Vja5whpSHCAfEH3zuXrGXh4rX883Uni7pnDjrlD8+z8BWnJpMnHOwonSprhl4WDhIKStpM2f45tcZSmoJ3XLZ898mk8YXFhobWNG3iwWXZE/omkk7mTu9+rnzo7TRNAZyoqEgoQH1LzBdOXhqFsrBjUnCindzMp+5gsbmxjWfdVeGhgFhrDJI0tsX9mW+u1BXxLEIBnPDWprZ4mrnJu7btaB5ZWcJ+E6upziO9RX/Aex4lBRYKnlBvjScs85HzTO0Q4czcUgAXHpFanFeohHgqFJQex/YXpLenm32qSsNEgilHamNbnIqSEMFAwB/APIHRlsWcs951vMbcAdee3VdY0TgBccwetqZgO+naYklfCHimjLZ4gsfe3OCr6pAeZXTf0o/9UMLzD6tlfX0rL7jJ6mwSxjHRNFj5+D0fSjhjcVRrLNFOU7DTWnj998JCPQFpt4GzevvvL6/xtSE7dUVTW5yVG5woqDc/bshat6KiJETSpFaXL7hpMYdd/VS7Pg80Iq6zPtKFSKruUGppCi3+eoTsDv5M7Cy0GpKq9Btac5iPPDPP4buP5Gf/tQ+BgFASCpA0ziy/qS1OZUmIUEAs53H7Ad8jYQzReJK/v+ykJ7YLpdjBRWu2NRNLJFlR1+AP3PYkqy2e9M9fURIkIPCflZu58K+v8svHVvozZu8HPNM1MT3jhg2e6iajW7cj3Q4P+GacPcY4q26njx5CNOGcJzONQks04S/e8zQFO+2E91l4WoGd/TQYEH/A9vwBnztwUrtz/M/tr3H8bxaxoznKpp1tvtPSxosm8gTiM1Y94kKbVoqJNzBnczT3JN6z3dIY5bdPvkfISjVif88nDc9er2OI+3w0JFXpN+QqNeiHSc4ax5lznQHLG4Ca2uKOphAJEQqmzEeecMgmFIwhrSKW7VOww08b2+J+COxXF74OpDtm2+Ip225pOEhJKOg7vW9+fjWn/MFZnOalllhwqOOMrm+JEQwIY9xKY9lmeV4xlNMPmADAAbXD/LxJaZpCJEhrPEHdDmd16/jqMrefnj/A+NpTOBggFJC0DKV20RWv/ZgZo9KuE4sbXv7Q+Rw808TnXce6jbdi+ZksxelnjOmZMqR9EU8rK7z5yBEK3roVL30FpL7nZx84kZvOy+6r8Rb7FUpTKH4smDLgyKkpZMnKWWHNSqPxJBW+pmDSjsnmvN5Q35o15bRzXHrCMW+W7ZczTBqmjKxg1ZYmWmNJ35xUEgo4q1ctU9GydfVsbWzz2yqsuPySUCBrvqDWWIKbn19NSyzhJ50bX11GNJ7k1hdW+8fa53lo2XruW+rkZPJKWoYtf4AnIENBIRQMpAmF5mjcD+30iuqUuLZr7/OOJZO+HdpbeDc6y0KsQ3d34uUzF/BVl4eZ2oU8Uf2N3nI0l7rn9/xkX5qXWvfgabunzBqfM6eT55NQn4LSb+hMU7Bn6d5A1tgWd1fMBggGAiTa+RSc/14YJDh5fuyBMWloF5EEcIqbjAxSjuRoIunHhdshqSXhYNaZ4qotTf5ga4cK/viUvX3zjC2g7np1HT979B0eXLbeFxpeeoM7ljgOcnvBXFkk6Pf56tP28c9pZ0X1U10HXE3B7c/c2mHMnjSsnaYQCXp+iZRg8WaX3oCfzUk8xl3J681avc/87osO6TORQoVg91GOwJtaU1HQ64SCgbQFf/b3rcE1H47qYNW09zwLZT5STUHpcexZ/brtzUwY5thGs+Xv92bdt7/8EbG4k1snFBRiyfTB3RughpVH2NKYWjTW0No+dDIUDPjmp6e+fiS1Iyq4f+nH1O1o8UNi48lkKtIonkxlpQwFsqZs2N4U9ftaYeUZmr/n6KypKkos05Bn4ooljK8JAGmzbs+xHBA4y/UFQCoaxTEf2ZpC6jP8y4K5REIBf7DwnZfh9MEjlkj6r7959zKArGsEvEymnuY1uqqU/SZU73I20r7OHz63P62xZLcK9XSV/zl6KqoTp64AACAASURBVD9/1Aljtr9vzloW2G1EbsHkCZF+52gWkZtEZJOIrLDa7hCRpe7faq92s4jUikiLte36QvVLKTx2qOZLq7b5r33zR8A2mzg/iL+9tIZYIknYNcdkphj2BE2mb6ExI+2wX0/APX5IaZhAQHjgq4dz4OTh/sAdixt/kG+NpXwKJeFguyRkADtaYr5jd1hFhOs/fwDf++SeDC0Pp2bzlqbQZr32wnDrLEf0fhOr/brLkLIzZ2b3CFrntlcvp3+GrjkhQ1Pw2u303XZs+8VHT/Vnx5nY6TViOUJXBxoi0isCAWDc0DL/ta0pPPjVw7n2rFkdrkHwnkWhHkkhNYVbgN8Dt3kNxpgzvdci8kug3tr/A2PMrAL2R+kFTvvj82l5dv7vrjdIJg1nzJ2Yip6xZrn7TUwNjG1xx3yUzafQGnNKEGZmQl1w0+K09972hG+qcq41vCLCnmOG+OGYsWTSnV2LoynYPoUsmkJ9c8wXUNVlYU7Ye4y/zZ+JWyO6HYKajZEZ9Yy/cMhuPPXOpnb7ha1z+6kmAoG0z9AbVLx+eGauSDuhkF6Y5RvHz8jZPzuTZyxh/EVrSs9g+6XsSche44b6K5tz4Wm7ZXlWf+sqBXvSxphFwLZs28QxTJ4BLCzU9ZXeJ55IZk285oVqejNpe9ZZEgry7ROdwamhNUYkJAQDTiF1J12Dc8zyunpm/+ixdmsdMsmsURy0Bs9QMOD3Ieb6L0pDQWedgmtCCgcDWX0KO1qivqaQmerZs7O/+EFqnUJmgr1MvIglj0Onjsi6X2rhWdLxCYhjNvAEgLcq2r5XbzWyJ9xsTSbfVbC2puDUURi4voRikO5T6Nrg3uL614ZX7Fq21lwUS/zPAzYaY+yqKJNF5HUReUZE5uU6UEQuFJElIrJk8+b2IXNKcVi6dkfaorUqK8mZZ5rxzR8ZA5P3A9nZGvd9Cs7+SaKWnb6hNZ5WH8Hmcwc5dvhohqPZvlY4GPC1FS/vT0k44K4sTfjCoCSL+agtlmRTQysVkWDO+rx2XvyGlni7ZGYe//yfQ/nep/ZMa8sVG+99Fomk4el3N/kL0jzBagswz//grT3w7yeUWkHraQqdOSkjoVR6Z0+AKj2HnQSwqyGwLa7QH5ZHTezuUKwnfTbpWsJ6YJIxZjbwNeDvIlKV7UBjzA3GmDnGmDk1NTW90FWlM1ZtbuTUPzzP5f9K1UC+5NhUzV4vvt+PPsoYYOwfiBeDD66mkEfZy5JQwJ9p++YjXyhYg6brwDbG+P6LEktTSA2i6YN+QBzfxa0vfsSMsVm/lj7xRJLl6+pZuHhNmmC0mT1pWFpRHCBnVI830P/83ytZUdfg14zwnNTTLJ+ApwVsbXIc8Z75yPt836xr8P0aR03v+LdjO5oHi0+hN6nYBU3B+/1UFKgORa9HH4lICDgNOMBrM8a0AW3u61dF5ANgD2BJb/dP6TpeBNBzVpqH4ZbN3IuGyRZ9BOnRPHa6hnjStMvXA3DW3ImMrirl2icdRfOHn97Lt6+mCtdn1xSMccp3bmmMEnZXVH+8o4WJw8v8H2emo3lIaZj3NjUCnYcrtsaTnP4np25CJBTgmBmj/Pt55NJ5aUn08sHTFLz7uub0/QD4/edm86vEfmm5ciKhAN84fjqrNjcxpabCH8grS5wZ5S8ff9ff99dnduy+CwcD1O1o4R+L19DUllCh0MPYE4ZsmmlH3PCFA3jgjfX+WpaephghqfOBd4wxfgkpEakBthljEiIyBZgG5E7Gr/QpvBm2vbq42lJtPaGQzacA6fn4IxmLwWJZUmhPHlnB+GGp6I2ySLBd2ctEMolIetieN8D+8IE3Adh7/FCeWrmJF1dtZWtTpf/j9JLQefdREQn5vozjZqYczNnwqmKBE8l003lz/W2ZhVvyIdPMM8JdMyCSvdrZxUfv3q4tW70DuzRpNkpCAZau3cHStY6PaCCntygGIypL+M2ZswgFJac5MhdTaiq5dP60znfsJoUMSV0IvAhMF5F1InKBu+ks2juYjwCWuSGqdwMXGWOyOqmVvkc2y0epNWB5yey86JxMTcF2ukWCQtDK1ZNNU3BWEafnDfJs3qs2N/rXyhxQvX1aoglOP2ACp8+ZyOG7O2aUdzc2+plTL5s/jStP3Zsll89n8XfnUxIK+P6Szuy/rbGEb+LpiXQJIpK2kKmkGzP28m5EqWQKAXU09zynzh7PSfuOK3Y32lEwTcEYc3aO9vOytN0D3FOoviiFJdvAbdvIMzUFe0CH9j6FcCc+BSdKKHX+8kjIj+b57ZPvc+bcSWn1BDz8kM1YwrfL2nH6V5y8F+BUK/v8wamcQJFQwE8L0blQSPW3p5yzvzlrFp/788t+X7qKl3iws2pyNpnX6epsVum/qE6o7DLxzBVXOIOtlzzNi5v36s6OqEyP0bcdZnuOrUr5FBImLfbfoy2eXnB+ck0Fu42o4Mw5E/1QUGf1bsZs1x3oEknjCxU71nuCZZKyiYQC/iK5kk4Gx9ZYwo8Q6qkiKPaA3F0zTleLzWea+FQoDB5UKCi7TMKy+182fxqrr/4UNUNKePSyIzhmxig/6uiDTU2MrippZ8+2zUdH7FFjhaRm1xRaoglfm4BURtGRQyI0RxMYY2iNJdqtTrVt8J7AsJ3KuQZce8afbbUzwG1fPBDwzEfuGokeEgplPSAU5u85GoARFRHuu/iwTvfP1HJy3bcy8NDcR8ou40UVXXz0VC6bv0faNju0sb4lxogsC248k8y+E5yVnMGAN6N3fArhjKppLZb5x6Y8EiKRNDz3/hYWLl7bbrttm8+mKeQUCmnZTLPPmL2ZdGss6aeq6KpQuO/iw7IWvUnrYzdNUl7/Dtt9JPtNrO50/3bmowIXnlH6DioUlF3Gi7Y5co9R7baFQ6kFY97agExEhMf/9wjfL+BpAQtueoWdbuGdWCLOwVOG89KqbRy75yjSC2o6eNlLvbrFmYyrTpmHvMG3NI8BN30FdvZ9/BKLVt6nrqY2zjVY94T5yE+FkafDOPM6vZUTSCk+KhSUXcYzD2WbGduaQjSezBk9M210KgPn3MnDOf2ACTzx9kYAjt9rDJGQ8KV5U/xFW8vWtU+n4a132JClti3AxOEpoeD1KZ8BN11TyCUUnPPssMJygz0UsWMPyN0VCl7/THsXTVbUfDR40Set7DKJHKGmAJGQpKVLCIc6HyhHVpbwi9P3Yw9XUIwfVsZPT9s3LdW0N8jtY2UaLXfrMnuRQpmUhIJc7qaX8Jzj9mCXa4FWwnJ251pF6plX7MI0Iyp6pqD9EHv1a7B7M3bvPhNZHPfZ0OijwYtqCsou45mHcmkKniYRTSTTwk87wzN1hLOcd9qoSn7+2X2ZW5sqZejZ3jPTadt4A783OI6uSq0KzWU+8vp/0ZFTcw6O3qDrRT/tObbKT/S3q9gL8Eoj3TUfeam58xQKGn00aFGhoOwyKU2h/YAVDmZm28x/UPOTt2U5RkQ4Y87EtLbM2e3ZVrEa/5xWzWNIVRmzt+Vi8sjshdQBSl0TT6O7yO2iI6e0y2/UE3Q1T46HJ7TyNh+5n6UInHPQJGZ2YzW20j9RoaDsMl5666yaQihdU+iKTdxbAJfvalp7wDxl1jh+eto+7fZJJdtz+tSV6lUd9d0zH3krnzPXSBQb77PJ97P0hPfBk0dw5antP0dl4KJCQdll4lbt4Ey8dNXxRLLLKZi98TrfWrT2oJ3rOnayva4S6cCeHw4KAcHPkZRvlE++PHrZvF0q1D538jBOmz2eLx4+Oa/9NdfR4EWFgrLL+JpCloHwYzdV82+ffI9ovGuagjcI5lv1yxYEua4TtuoTeNx8/lyWra3Pur9NRykuRJzEZp4/o6frD8wYs2vmm1FDSvlVJ5lRbXoib5PSP1GhoOwy3qw7m0P4AzdB3SurtztlHbswWPrmozxNMWmaQo5BzVsYZ2sKR08fxdHT26+xyKQz4VQeCfqZYntaU+ht5k2r4ZgZW/nsAROK3RWll1GhoOwy8Q6ij0a41cdGVEaI1XVRU3B3zXeALclDKEwe4dRDmDWh81W9mXTWi6rSMFsbnQI3fc2n0FWmjxmSlvZbGTz072+u0ifwS19m0QJ+/l/7ArDbiHLauljBq6Poo2yU5OFT2GfCUJ78+pFckKdtHfKP2KkqC1tVz/q3pqAMXlQoKN3imXc389KqrYCdErv9QDisIsKQ0hANLXGi8aSfiiIfvLQUdvGejsjH0QxOKcuuRB3li11YqL9rCsrgRc1HSrdYcNNiAFZf/SlLU8g+0JZHgqyvdxzOXSk2/rXj9kCAT+7dcbUzj3x8CoVke3NKeGn5SqW/ot9cpctkrhhO1UPO/nUqj4RY9J5Tv3loef6pHypKQlx+0kzfL9EZ+UQfdYfDp40Ectdb8Dhyjxr/tVYqU/orKhSULrPdtZt7ePWQc6WKriwJ+auaq8vy1xS6SigY4EuHT2b+nqOZ5w7kPcGXj5jCi985hilW7qVsHDMjFcGUrx9EUfoahazRfJOIbBKRFVbbD0SkTkSWun+ftLZ9R0TeF5GVInJ8ofql7DpN0ZSm8P37VvD62h0dLjC78tS9ASfVwuSRFQXt2+UnzeQvC+aw+6ghne+cJyLC2KEdawmQXixINQWlv1JIn8ItwO+B2zLaf22MucZuEJGZwFnAXsA44AkR2cMYk0DpczRZ5qPbXvwISC8Ek8l+E6t5/6oTgYE9g7aT/Q0toEakKIWkYL9QY8wiYFueu58C/MMY02aM+RB4HziwUH1Tdo3GtvayurNUFKFgYEALBEgXCpklRxWlv1CMX+lXRGSZa14a5raNB+z6ievctnaIyIUiskRElmzevLnQfVWy4GUCtenvK3h7grJwkANrh/Pbs2cXuyuK0m16WyhcB0wFZgHrgV929QTGmBuMMXOMMXNqamo6P0DpcWyfgkdQ4/IREe686BA+vd+4YndFUbpNr/6SjTEbjTEJY0wS+DMpE1EdYCfHn+C2KX0QL5LIRh2rijIw6FWhICJjrbefAbzIpPuBs0SkREQmA9OAxb3ZNyU7TW1x6txMpx7eCmabXOGoiqL0LwoWfSQiC4GjgJEisg64AjhKRGYBBlgNfBnAGPOmiNwJvAXEgYs18qhvcNYNL7G8rp7VV3/Kb8tWi0BX8CrKwKBgQsEYc3aW5hs72P8q4KpC9UfpHsvr2tcZ8EpZ2qimoCgDA53eKV3GK2Vpk291NEVR+jYqFJS8MFb+6GyagoakKsrAQIWCkhe2IIhn0RQCu1A/WFGUvoMKBSUvbEEQz6IpqFBQlIGBCgUljXc2NFD77YdY/GF6hpJY3BEEp1//An9atKrdcXaKB0VR+i8qFJQ0nn3XqXvw7zc3pLXHXE3hldXbsx43rAt1EhRF6buoUFDSSLoO5cxgomwmI4/Ddx/JeYfVFrBXiqL0FqrzK2ncscTJS5jpI4glkiSyLFoD+OsFByLqU1CUAYFqCkoaqzY3OS8yxvhYIklbPPsicxUIijJwUKGgZKW9pmBojbUPRVUUZWChQkHJSqZP4aVVW2mNaToqRRnoqFBQspKpKVxx/5u0qFBQlAGPCgUlK9n8BBfetqQIPVEUpTdRoTDIWb2lidpvP8STb29Ma8+W3+4DzwmtKMqARYXCIOeNdTsAuPf19EJ3ghDLUkxHUZSBjQqFQU7ELY4TyyixmUgm1YegKIMQFQqDnEjIFQoZWkEsaWiJqlBQlMGGCoVBjldGM+oKBc+/HIsnVSgoyiCkYEJBRG4SkU0issJq+4WIvCMiy0TknyJS7bbXikiLiCx1/64vVL+UFAtuWsy5Ny0GnCyoyaTBq6UTTxqaXaFw2fxpxeqioii9TCE1hVuAEzLaHgf2NsbsC7wLfMfa9oExZpb7d1EB+6W4PPPuZv91NJH0M6EC3PLCah5ZsR6AWROr+fIRU3q9f4qi9D4FEwrGmEXAtoy2x4wxcfftS8CEQl1f6RpL1+5g+uWPprX97qn3ASgLB33fQybjhpYWvG+KovQexcyS+kXgDuv9ZBF5HWgALjfGPJvtIBG5ELgQYNKkSQXvpALlkZAfpWTzyvfmUxpWt5SiDCSK8osWke8BceB2t2k9MMkYMxv4GvB3EanKdqwx5gZjzBxjzJyampre6fAgpywSoCTL4F8zpIQhpeEi9EhRlEKRl1AQkUtFpEocbhSR10TkE925oIicB5wEnGOM49Y0xrQZY7a6r18FPgD26M75lfwwJnfRnEzKcmgKiqIMPPL9pX/RGNMAfAIYBnwBuLqrFxORE4BvAp82xjRb7TUiEnRfTwGmAe0LASs9RjxHwZxslIWDlISDBeyNoih9hXx9Cl4mnE8CfzXGvCmdVFYRkYXAUcBIEVkHXIETbVQCPO4e/pIbaXQE8CMRiQFJ4CJjzLasJ1Z6hI7Ka2ZSHgmqpqAog4R8hcKrIvIYMBn4jogMwRm8c2KMOTtL84059r0HuCfPvig9QDyZf16j0nAwq09BUZSBR75C4QJgFrDKGNMsIiOA8wvXLaXQ5Ksp7DdhKECapvDFwybzmdnjC9IvRVGKS15CwRiTFJGNwEwRKWYYq9JDeD6FMVWlbGhoTdtWFg76yfB+cto+AGk+hW+eMJ1S9TEoyoAkrwFeRH4GnAm8BXgJcQywqED9UgqMZz66dP40nntvCw8tX+9vqy4P01Kf4C/nzmGvce01hVC2YguKogwI8p31nwpMN8a0FbIzSu/hmY+CASEcTB/kh5SGWF8PCSts1fYpBFUoKMqAJV/v4SpAVykNIDzzUTgofqZUj+EVEWcfy+9gawqdBJ4pitKPyVdTaAaWisiTgK8tGGMuKUivlIKTcM1HwUCAsJvXqLIkxINfPZxrHlsJpEcoaToLRRkc5CsU7nf/lH5OayxBaThIzNUCwgHxtYDScJDakRW+5pCuKahjWVEGA50KBXel8XnGmKN7oT9KAXnm3c0suGkxt5w/l5GVJUC6T8FzIO8+qhKAEZUR/9hcWVIVRRlYdCoUjDEJEUmKyFBjTH1vdEopDCs3NACw6N0tnLzfWMCpvOZpBiFXOFx05FT2nTCUedNSCQdLVCgoyqAgX/NRI7BcRB4HmrxG9Sn0L3yTUUhIJO3oI1couJpCMCBpAgFUU1CUwUK+QuFe90/px7S6C9KCIr6ACAUlrwFfNQVFGRzku6L51kJ3RCk8b6xzrH+xRNLXFEKBgK8hdJT4IqQJ8RRlUJDviuYPyTJmGGO0cG8/4Z0NDSxyazK3xVP1mEPWOoVkF2osKIoyMMnXfDTHel0KnA4M7/nuKN2hORqnNBQk0MFK4w82+a4govEkCc98FBB/nYLKBEVR8rIJGGO2Wn91xpjfAJ8qcN+UPIglksz8/r+58qG3O9xve3PUfx2NJ/2FaaFAgIgbdaRCQVGUfMtx7m/9zRGRi8hfy1AKSHOb4zy+/eWPOtyvviUGwIRhZbTFk36ai1CWNBeKogxe8h3Yf2m9jgMfAmf0fHeUrtIciwP4juNc7GiOUhYOMqQ07AgF23wU9MxHqiooymAn7yI7xpi0mskiMrkA/VG6SHPU0RQSnQzoO5pjVJeHiYQCRBOWphBILV7rTCR84eDdGD+sbJf7rChK3yVfu8HdebalISI3icgmEVlhtQ0XkcdF5D33/zC3XUTktyLyvogsE5H98+zboKbFFQqdTfJ3tMQYWhamJBQgGk8QT6SijyIhx6fQWfTRj0/dm4uOnLrrnVYUpc/SoVAQkRki8l/AUBE5zfo7DycKqTNuAU7IaPs28KQxZhrwpPse4ERgmvt3IXBd3ncxiPEqpHVGvasplIQC6T6FgPjJ7jqxQCmKMgjozHw0HTgJqAZOttp3Av/d2cmNMYtEpDaj+RTgKPf1rcDTwLfc9tuMY9h+SUSqRWSsMWY9Sk4881FnbG+OMrWmklgi6UQf+ZpCgLKIIxRiiWRHp1AUZRDQoVAwxtwH3CcihxhjXuyha462BvoNwGj39XhgrbXfOrctTSiIyIU4mgSTJk3qoS71X1qi8bz229kaZ0hpiKZo3A1JTeU+qihxhUJchYKiDHby9SlsFZEnPd+AiOwrIpfv6sVdraBLRgtjzA3GmDnGmDk1NTWdHzDAiSby+/ja4glKwgEiwXTzUTgolIdD7rlUKCjKYCdfofBn4DtADMAYsww4q5vX3CgiYwHc/5vc9jpgorXfBLdN6YBEMr+BPBpPUhIKOtFH8WRaltRyT1PIU8AoijJwyVcolBtjFme05We3aM/9wAL39QLgPqv9XDcK6WCgXv0JnWMP5G3x3P6FaCJJJBSgJBQkmkj6/oNwIEBFRNchKorikO9osEVEpuKaekTks2TY+rMhIgtxnMojRWQdcAVwNXCniFwAfERqEdzDwCeB93FqQp+f/20MXuxFa42tcUoq25fNTCYNsYQhEgykaQoiEAiI1l9WFMUnX6FwMXADMENE6nBWNJ/T2UHGmLNzbDo2y77GvY7SBeKWH6CxLc4It8ymjecriIQCRBIB2uIJYglDOOAIAxHhhL3GcOrscb3TaUVR+iz51lNYBcwXkQock1Mzjk+h44Q7SsGJW5rCztbsFj1PKDgL1wLEEoZYIknQyqp6/RcOKGxHFUXpF3S2eK1KRL4jIr8XkeNwhMECHBOP5j7qA8Qtn0JjW3ah0BZLaQolrqmoOZrwazIriqJ4dKYp/BXYDryIs1jte4AAnzHGLC1w35Q8iGf4FLJhawqRYASAddub/YpriqIoHp0JhSnGmH0AROQvOM7lScaY1oL3TMkL26fwpduW8Ksz9qOqNEwoKBw1fRTghKOCoylMH10FwNI1OyiNtHdKK4oyuOlMKMS8F8aYhIisU4HQt4hnJCz62p1v+K9XX+3UQfKFQjDI0PIwADvbnBXOiqIoNp2NCvuJSIP7WoAy973gBAxVFbR3ShpzrnyCaaMqWXjhwX5bPI/Fa7amELEK6jTnmUxPUZTBQ2e5j9S+0IfY0tjGlsa2tLZ40vhrD3IRTTiDfyTkrFPwOH7mmMJ0VFGUfovaD/oxGxta+dMzqzrdz48+CgYosYTCT0/bp2B9UxSlf6JLWfsx37h7WV77tVmL1+x6zAGNPlIUJQMVCv2EbPWTNzXk5/P3TEsloUDagjVFUZRMVCj0E9qy+AxyLVbLxBYKiqIoHaGjRD/hxuc+bNfW1EWhEFGhoChKJ+go0Q9oaI3xi3+vbNfe1EEpTrGsRHZCPEVRlI7QUaIfkExmL36TyNEO6aai1OI1fdyKonSMjhL9gFwV0ToSCl6UUVNbnCvufxNQTUFRlM7RdQr9gFhG7eR125tpyTAdXXvWLC79RypHoScw6na0+G0lIWct4u1fOohqN92FoiiKjQqFfkCmUDj8Z/9pt88ps8bz2JsbeWi5UxDPy4nUaqWyCLupsg/bfWShuqooSj9H7Qn9gEyhkAu7PoKXPfXxtzYC8IOTZyKiaxQURemYXtcURGQ6cIfVNAX4PlCNU7Nhs9v+XWPMw73cvT5JNJ7bdwAwcXgZAKFASsYnjeOg/t1T7wMwp3Z44TqoKMqAodeFgjFmJTALQESCQB3wT+B84NfGmGt6u099nY40hS8dPpmLj94dSJmH/OOsDKplWjtBUZQ8KLb56FjgA2OM1nrugO3N0ZzbFhxay7AKp5paZnSRXapzfHVZYTqnKMqAothC4SxgofX+KyKyTERuEpFh2Q4QkQtFZImILNm8eXO2XQYc5938Stb2gMDE4eX+++GucPBoaoszaXg5p84aR2lYNQVFUTqnaEJBRCLAp4G73KbrgKk4pqX1wC+zHWeMucEYM8cYM6empqZX+tpXydQMRlSWpL1vaI3RHI1TFtEgM0VR8qOYmsKJwGvGmI0AxpiNxpiEMSYJ/Bk4sIh96zM8vXJT2vt9Jwz1XwcyoolqKh1NocL1H8z/1SK2NEb994qiKJ1RTKFwNpbpSETGWts+A6zo9R71MZ56Z2M709ER01LaUWY27QMnj+CUWeO45Nhpae3lKhQURcmToggFEakAjgPutZp/LiLLRWQZcDTwv8XoW1/ie/9Ml4ufP3gSk0aU59jb8Slce9Zsjt1zdFp7eYmajxRFyY+ijBbGmCZgREbbF4rRl77MyMoS1tenCulceeo+PLRsfafHVZWlP1bVFBRFyZdiRx8pHTCiMtKuzR7gE1mqsQFUlabnNSrTyCNFUfJEhUIfJtsM3w4tjedY1JYZflqh5iNFUfJEhUIfJmzVPzhgN2fZhi0oOsicnYauZlYUJV9UKPRh7FxG131+f6B7A3yFrlNQFCVPVCj0YSKh1DoEzy9g+wfydSCro1lRlHxRodCnSQkFz5RkawqThucOT7UZmbHSWVEUJRcqFPowCSvLqS8ULE3hxvPm5nWemiEqFBRFyQ8VCr1EImk6rKmcySurt/Hoig3++2DA0Ro8oVAaDuSd+dQ7VlEUpTNUKPQSU7/7MOfe9HLe+59+/Ys0tMbbtQcCwuWf2pN/XXxYh8efMmscACt+eHzXOqooyqBGhUIv8vz7W9PexxNJbnruQzY1tOY4wsEb4D2+NG8KM8ZUdXjMr86YxTs/PoFKXaOgKEoXUKHQy/zr9Tr/9b2v1fGjB9/i9pfXdHjMtWfN7vJ1ggHRGgqKonQZFQq9zOLV2/zXzVHHPLSjg8pqiqIovYkKhV7CK4jT0BLz28Sth9AaS09XoUJCUZRioUKhFzDGEI07A399S4yYm7PI+98aT6Ttf8Jvnu3dDiqKorioUOgF4lYo6rPvbWHa9x6hqS3uh6jet/RjjJXxdEMnjmdFUZRCoUKhF4hlyWbaHE2kCYuWmKMtmBzpsBVFUXoDFQq9gGc6skkkDfFESgC0uX4FTzh4HFg7vLCdUxRFsdAg9l6g3nUuV5eH2dHsvI4lkmlpLDy/QkNLasHaFSfP5PzDJvdiTxVFGewUTSiIy77TuQAADntJREFUyGpgJ5AA4saYOSIyHLgDqAVWA2cYY7YXq489wZNvb+SCW5cATmI6TyjEk4ZNO9v8/bwIpIZWZ/vvPzebk/Ydh6IoSm9SbPPR0caYWcaYOe77bwNPGmOmAU+67/s1T6/c7L8eXpEqr9kcjfOPV9b679tcTWHV5kYAxg4t7aUeKoqipCi2UMjkFOBW9/WtwKlF7Msu0RyN0xZPMGFYKmndEdNG+q8//fvn0/b3NIWla+sJB4V9xlf3TkcVRVEsiikUDPCYiLwqIhe6baONMevd1xuA0ZkHiciFIrJERJZs3rw5c3OfYeb3/830yx9NW5g2t3Y4fznXUYoyM6Y+8dZGADY2tDJqSKm/2E1RFKU3Kaaj+XBjTJ2IjAIeF5F37I3GGCMi7eIzjTE3ADcAzJkzp8/Hb965JGUimjGmitfXZneR/P4/7zOiMsKmna2MrtL6B4qiFIeiTUeNMXXu/03AP4EDgY0iMhbA/b+pWP3rKep2tABw90WHMLQ87BfLycYPH3iLLTujWilNUZSiURShICIVIjLEew18AlgB3A8scHdbANxXjP7tKtkWoM1x1xuEshS8OWTKCADmTRtJSyxBhaa7VhSlSBRLUxgNPCcibwCLgYeMMY8CVwPHich7wHz3fb+jLctiNY9QFk1h4YUHM7IywqTh5bTEEpSG1Z+gKEpxKMqU1BizCtgvS/tW4Nje71HP0tjWvmKaRziYvTRmMCAkkobWWELrICiKUjR0SloAPnb9CGfNndhuWyiQ/SMPBQLEVSgoilJk1HhdAF78wCm7+Y3jp7P/pGH+KmWASCilKXjagfe6NZYgljCUqVBQFKVIqFAoAPUtMUIBYXhFhDMytIWgqylUloR4/lvHEHPzHwUDwoPLnCUaKhQURSkWKhQKwM7WOFVlYb+yms3EYWV8/uBJXHD4FIaWh/32JssPoY5mRVGKhQqFAvDYWxsIZgk9BSf66MpT92nX3mqlzNaQVEVRioWOPj3MtqYoGxvaOt8xAzsdxp5jq3qyS4qiKHmjdooe5sMtTpbTPUZXdum4qFud7ajpNcwYM6TH+6UoipIPKhR6mFWbmwD40xfmdLJndr56zLSsvghFUZTeQIVCD7N6axPBgKSlzO4KQ0rVoqcoSvFQodDDrNnWwoRhZR0mvusIdTIrilJMVCj0MNubooywKqx1lUoVCoqiFBEVCj3M9uYo1eUqFBRF6Z+oUNgFGtvifO3Opdxp1Vre0Ryj2lqU1lVyrW9QFEXpDVQo5GB7U5Qzrn+Rl1dtzbnP0jU7uPe1Or55zzK/hsKO5ihDy7ovFBRFUYqJCoUcPPrmBhav3sadS9bl3Genleju4/pWmqNxmqKJblVOm1JT0a1+Koqi9CRqwM5BY6uTi6gllrs2gp399N2NO6kd4QzsY6pKu3y9hy+Z5y9gUxRFKRaqKeTAG/AfXr4hLS+Rzc7WlMBY+PIaNja0AjC6G0KhNBykqlTNToqiFBfVFHLQ0JLSAtZtb2H3UZWsqKunNBxg91FOGoorH3obgBP3HsMjKzb4awzGDO26+UhRFKUv0OuagohMFJH/iMhbIvKmiFzqtv9AROpEZKn798ne7ptNvSUU7lyylmTScNLvnmP+rxbx5Nsb/eI4AOcfNhmAf75eB8CobmgKiqIofYFiaApx4OvGmNdEZAjwqog87m77tTHmmiL0KQ1jDCs+bmDKyApWbWnihkWr0uouX3DrEkpCjjy9+rR9OHDycGZPqub1NTsAGKJrDRRF6af0uqZgjFlvjHnNfb0TeBsY39v96IjX1uzg/U2NXDBvst/295fXpO3TFnecwjVDHFPR3NrhABwyZYQmtFMUpd9SVEeziNQCs4GX3aaviMgyEblJRIblOOZCEVkiIks2b95ckH6t3LATgKOnj+p0X29NwoVHTGH+nqP5+Wf3LUifFEVReoOiCQURqQTuAS4zxjQA1wFTgVnAeuCX2Y4zxtxgjJljjJlTU1NTkL6t2dZMJBjIK4rIEwojK0v4y4I5TBxeXpA+KYqi9AZFEQoiEsYRCLcbY+4FMMZsNMYkjDFJ4M/AgcXoG8Dabc1MGFZGMCDM33N0h/sO0TBSRVEGEMWIPhLgRuBtY8yvrPax1m6fAVb0Vp9aYwkeWrae65/5AIC125uZ4M74/3jO/nzuoEkATB/thKIeM2MUk4aXM2VkBSMqu5/8TlEUpa9RjDCZw4AvAMtFZKnb9l3gbBGZBRhgNfDlQnfknlfX0dgW56qH3vZXEx8xrYY125rZd8JQACKhAD/5zD5cdere6kBWFGXA0+tCwRjzHJBtdH24N/uxrSnK1+96o137J3/7LADjq9N9AyoQFEUZDAzaNBd3WOmus+GFmiqKogwmBuUqq+ZonNtf/giAA3Ybxg9O3ot9JgzlPys3cf7NrwBw6qxxxeyioihKURiUQuG9jY2s297C2QdO5KenpdYVjBtaBkBFJEiomzWWFUVR+jODUijUjqjgz+fOYW5t+vq4qTUVnHvIbsybVpj1D4qiKH2dQSkUhpaHOW5m+/UHoWCAH52ydxF6pCiK0jdQG4miKIrio0JBURRF8VGhoCiKovioUFAURVF8VCgoiqIoPioUFEVRFB8VCoqiKIqPCgVFURTFR4wxxe5DtxGRzcBHu3CKkcCWHupOf2Cw3S/oPQ8W9J67xm7GmKypG/q1UNhVRGSJMWZOsfvRWwy2+wW958GC3nPPoeYjRVEUxUeFgqIoiuIz2IXCDcXuQC8z2O4X9J4HC3rPPcSg9ikoiqIo6Qx2TUFRFEWxUKGgKIqi+AxKoSAiJ4jIShF5X0S+Xez+9BQiMlFE/iMib4nImyJyqds+XEQeF5H33P/D3HYRkd+6n8MyEdm/uHfQPUQkKCKvi8iD7vvJIvKye193iEjEbS9x37/vbq8tZr93BRGpFpG7ReQdEXlbRA4ZBM/5f93v9QoRWSgipQPtWYvITSKySURWWG1dfq4issDd/z0RWdCVPgw6oSAiQeAPwInATOBsEZlZ3F71GHHg68aYmcDBwMXuvX0beNIYMw140n0Pzmcwzf27ELiu97vcI1wKvG29/xnwa2PM7sB24AK3/QJgu9v+a3e//sq1wKPGmBnAfjj3P2Cfs4iMBy4B5hhj9gaCwFkMvGd9C3BCRluXnquIDAeuAA4CDgSu8ARJXhhjBtUfcAjwb+v9d4DvFLtfBbrX+4DjgJXAWLdtLLDSff0n4Gxrf3+//vIHTHB/KMcADwKCs8ozlPm8gX8Dh7ivQ+5+Uux76MY9DwU+zOz7AH/O44G1wHD32T0IHD8QnzVQC6zo7nMFzgb+ZLWn7dfZ36DTFEh9uTzWuW0DClddng28DIw2xqx3N20AvALVA+Gz+A3wTSDpvh8B7DDGxN339j359+tur3f3729MBjYDN7tms7+ISAUD+DkbY+qAa4A1wHqcZ/cqA/9ZQ9ef6y4978EoFAY8IlIJ3ANcZoxpsLcZZ+owIOKQReQkYJMx5tVi96WXCQH7A9cZY2YDTaRMCsDAes4ArvnjFByBOA6ooL2ZZcDTG891MAqFOmCi9X6C2zYgEJEwjkC43Rhzr9u8UUTGutvHApvc9v7+WRwGfFpEVgP/wDEhXQtUi0jI3ce+J/9+3e1Dga292eEeYh2wzhjzsvv+bhwhMVCfM8B84ENjzGZjTAy4F+f5D/RnDV1/rrv0vAejUHgFmOZGLURwnFX3F7lPPYKICHAj8LYx5lfWpvsBLwJhAY6vwWs/141iOBiot9TUPo8x5jvG/P/t3V+IVGUYx/HvTwPbkGK36KayWAKRSra6CYoQBCG7q4WFjEC7EYRACPontHvbTVDdBNL/2EDEhRJqKY2KChVcdlUkV5C66UKwIJIQebp4njkN67qr49TQ7u8DhznznrNzzjvvMs95z7zzvHF7RNxFtuOBiNgCHASGa7e59W29D8O1///uajoifgV+kbS2ijYCJ1ii7Vx+Bh6SdEP9n7fqvKTbulxtu34BbJLUXz2sTVV2ZXr9pUqPvsjZDPwEnAZe6fX5dLFej5Bdy2lgqpbN5L3Ur4BTwJfAQO0vciTWaWCGHNnR83p0WPcNwGe1PggcAmaBPcCqKr++ns/W9sFen/c11HcIOFJtPQH0L/V2BsaAk8Ax4ENg1VJra2Cc/M7kAtkjfLaTdgW2Vd1nga1Xcw5Oc2FmZo3lePvIzMwuw0HBzMwaDgpmZtZwUDAzs4aDgpmZNRwUzABJFyVNtS0LZs+VtF3SM1047hlJt1zr65h1i4ekmgGS/oiI1T047hlyfPnZ//rYZvNxT8FsAXUl/5qkGUmHJN1d5aOSnq/155RzWExL+qTKBiRNVNmPktZX+c2SJmtegN3kD5Bax3q6jjEl6W3lPBErJb1XcwjMSNrZg7fBlhEHBbPUN+f20Ujbtt8j4j7gLTIr61wvAvdHxHpge5WNAUer7GXggyp/FfguIu4B9gFrACStA0aAhyNiCLgIbCF/uXxbRNxb5/BuF+tsdonrFt/FbFk4Xx/G8xlve3x9nu3TwMeSJsiUE5ApR54EiIgD1UO4EXgUeKLK90s6V/tvBB4EDmdqH/rIxGefAoOS3gT2A5OdV9Fsce4pmC0uLrPe8jiZg+YB8kO9k4stAe9HxFAtayNiNCLOkTOrfU32QnZ38NpmV8xBwWxxI22PP7RvkLQCuCMiDgIvkCmaVwPfkrd/kLQBOBs5t8U3wFNV/hiZyA4y4dmwpFtr24CkO2tk0oqI2AvsIgOP2b/Gt4/MUp+kqbbnn0dEa1hqv6Rp4C9yqsN2K4GPJN1EXu2/ERG/SRoF3qm/+5N/Uh+PAeOSjgPfkymhiYgTknYBkxVoLgA7gPPkDGutC7iXuldls0t5SKrZAjxk1JYb3z4yM7OGewpmZtZwT8HMzBoOCmZm1nBQMDOzhoOCmZk1HBTMzKzxN1HTlyAeAqz1AAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "episodes_list = list(range(len(return_list)))\n",
    "plt.plot(episodes_list, return_list)\n",
    "plt.xlabel('Episodes')\n",
    "plt.ylabel('Returns')\n",
    "plt.title('REINFORCE on {}'.format(env_name))\n",
    "plt.show()\n",
    "\n",
    "mv_return = rl_utils.moving_average(return_list, 9)\n",
    "plt.plot(episodes_list, mv_return)\n",
    "plt.xlabel('Episodes')\n",
    "plt.ylabel('Returns')\n",
    "plt.title('REINFORCE on {}'.format(env_name))\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "colab": {
   "collapsed_sections": [],
   "name": "第9章-策略梯度算法.ipynb",
   "provenance": []
  },
  "kernelspec": {
   "display_name": "Python [conda env:Hands-on-RL]",
   "language": "python",
   "name": "conda-env-Hands-on-RL-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.11"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
